package gameEngine;


import graphicEngine.GameDisplay;
import graphicEngine.GameWindow;

/**
 * Le jeu en lui même, contenant la boucle principale.
 * Jframe a enlever par la suite
 */
public class Game
{
	
    private GameData GD;
        
	/**
	 * Fonction en dessus de la boucle principale qui se charge d'initialiser tout ce qu'il faut.
	 * En particulier la communication avec les IA (création des processus) et le gameData (?) (nombre de joueur, taille)
	 * Se chargerait aussi de la destruction de certains element.
	 * Appelle la m�thode run ci dessous.
	 * 
	 * 
	 * @see run()
	 */
	public void match(int fieldWidth, int fieldHeight, int teamSize, GameWindow window)
	{
            GameDisplay display = new GameDisplay(fieldWidth, fieldHeight, teamSize);
            window.setGameDisplay(display);
            GD = new GameData(fieldWidth, fieldHeight, teamSize);
            GD.addObserver(display);
            
            run();
    }
	
	/**
	 * Méthode contenant la boucle de jeu en elle  même.
	 * -Récupére les données envoyé par les IA.
	 * -Met à jour le jeu.
	 * -L'envoie à qui veut pour affichage.
	 * 
	 * Gére les différent état du jeu (engagement, but...)
	 * 
	 * Paramétre à voir en fonction des besoins (les IA).
	 */
	public void run()
	{
		boolean matchEnded = false; // le match au complet, qui se termine aux point ou/et au temps
		boolean roundEnded = false; //round = séquence de jeu entre chaque but
		
		//Initialisation préliminaire (ce qui a besoin d'être)
		
		
		//Boucle de match
		while (! matchEnded)
		{
			//Initilisation du round: repositionnnement pour engagment, transmssion aux ia
			

			
			//S'arrete en cas de buts, ou si le match se termine pour une raison X (mais pas Y)
			while(! roundEnded && ! matchEnded)
			{
				//Réception des infos IA				
				//input clavier pour test
				
				//Mis à jour du jeu
				GD.update();
				//Traitement (but oopa)
				
				//renvoie les nouvelles infos aux IA
			}
			
			//Comptage des points et on en informe les ia
			
		}
		
		//Destructions
		
		
	}

    public Object gameData() {
        return GD;
    }
    

	
}
